package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow;

import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.web.response.Result;

import java.util.List;

/**
 * describe 代理流量
 *
 * @author Jia wei Wu
 * @date 2025/06/06 11:39 晚上
 * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository
 **/

public interface LazyProxyFlowRepository {


    /**
     * describe 新增代理流量
     *
     * @param lazyProxyFlow 新增代理流量
     * @return {@link  Result<LazyProxyFlow>} 代理流量新增后领域对象
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<LazyProxyFlow> story(LazyProxyFlow lazyProxyFlow);

    /**
     * describe 批量新增代理流量
     *
     * @param lazyProxyFlowList 批量新增代理流量
     * @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<List<LazyProxyFlow>> batchStory(List<LazyProxyFlow> lazyProxyFlowList);

    /**
     * describe 查询单个代理流量
     *
     * @param lazyProxyFlow 查询单个代理流量
     * @return {@link Result<LazyProxyFlow>} 代理流量DTO对象
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<LazyProxyFlow> findOne(LazyProxyFlow lazyProxyFlow);

    /**
     * describe 查询多个代理流量
     *
     * @param lazyProxyFlow 查询多个代理流量
     * @return {@link Result<List<LazyProxyFlow>>} 代理流量DTO对象
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<List<LazyProxyFlow>> findList(LazyProxyFlow lazyProxyFlow);

    /**
     * describe 分页查询多个代理流量
     *
     * @param size          当前页数
     * @param current       当前页
     * @param lazyProxyFlow 分页查询多个代理流量
     * @return {@link Result<LazyPage<LazyProxyFlow>>} 分页代理流量领域对象
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<LazyPage<LazyProxyFlow>> findPage(int size, int current, LazyProxyFlow lazyProxyFlow);

    /**
     * describe 删除代理流量
     *
     * @param lazyProxyFlow 删除代理流量
     * @return {@link Result<LazyProxyFlow>} 代理流量
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<LazyProxyFlow> remove(LazyProxyFlow lazyProxyFlow);

    /**
     * describe 是否存在代理流量
     *
     * @param lazyProxyFlow 是否存在代理流量
     * @return {@link Result<Boolean>} 代理流量是否存在
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<Boolean> exists(LazyProxyFlow lazyProxyFlow);

    /**
     * 根据客户端查询流量
     *
     * @param size          分页大小
     * @param current       分页
     * @param lazyProxyFlow 查询条件
     * @return {@link Result<LazyPage<LazyProxyFlow>>} 分页访客端流量DTO对象
     */
    Result<LazyPage<LazyProxyFlow>> findPageGroupByClientId(int size, int current, LazyProxyFlow lazyProxyFlow);

    /**
     * 根据客户端ID查询出 客户端所有的进出口流量
     *
     * @param clientIdList 客户端ID
     * @return 客户端所有的进出口流量
     */
    List<LazyProxyFlow> findListByClientIds(List<String> clientIdList);

}